Page({
  /**
   * 页面的初始数据
   */
  data: {
    statusBarHeight: 0,  // 状态栏高度
    navHeight: 0,        // 导航栏总高度
    listData: [],        // 粉丝列表数据（从接口获取）
    isLoading: true,     // 加载状态标识
    operatingIndex: -1   // 正在操作的索引，防止重复点击
  },

  /**
   * 关注/取消关注事件处理（双向功能）
   */
  handleFollow(e) {
    const index = e.currentTarget.dataset.index;
    const listData = [...this.data.listData];
    
    // 防止重复点击同一按钮
    if (this.data.operatingIndex === index) {
      return;
    }

    // 检查数据有效性
    if (!listData || index < 0 || index >= listData.length) {
      console.error("数据异常：", listData, index);
      wx.showToast({ title: '操作失败', icon: 'none' });
      return;
    }

    const currentItem = listData[index];
    const token = wx.getStorageSync('token');
    const userInfo = wx.getStorageSync('userInfo');
    const currentUserId = userInfo?.id;

    // 校验登录状态
    if (!token || !currentUserId) {
      wx.showToast({ title: '请先登录', icon: 'none' });
      setTimeout(() => {
        wx.navigateTo({ url: '/pages/login/login' });
      }, 1500);
      return;
    }

    // 防止用户关注自己
    if (currentUserId === currentItem.followerId) {
      wx.showToast({ title: '不能关注自己', icon: 'none' });
      return;
    }

    // 设置操作中状态（禁用按钮）
    this.setData({ operatingIndex: index });

    // 确定接口地址、请求方法及参数
    const isFollowed = currentItem.isFollowed === 1; // 1=已关注，0=未关注
    let url = '';
    let method = '';
    let requestData = {
      followerId: parseInt(currentUserId),         // 当前用户ID（关注者）
      followedId: parseInt(currentItem.followerId)  // 目标用户ID（被关注者）
    };

    if (isFollowed) {
      // 取消关注：确保传递正确的关注记录ID（关键修复）
      // 校验followRecordId有效性，防止删除错误记录
      if (!currentItem.followRecordId) {
        wx.showToast({ title: '数据异常，无法取消关注', icon: 'none' });
        this.setData({ operatingIndex: -1 });
        return;
      }
      url = `http://localhost:8080/userr/follow/${currentItem.followRecordId}`;
      method = 'DELETE';
      // 保留参数用于后端校验，避免删除错误记录
      requestData = {
        followerId: parseInt(currentUserId),
        followedId: parseInt(currentItem.followerId),
        recordId: currentItem.followRecordId // 显式传递记录ID用于后端核对
      };
    } else {
      // 关注：用POST方法，传递用户ID
      url = `http://localhost:8080/userr/follow`;
      method = 'POST';
    }

    // 发起请求
    wx.request({
      url,
      method: method,
      header: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      },
      data: requestData,
      success: (res) => {
        // 处理重复关注错误（数据库唯一约束）
        if (res.data.code === 500 && res.data.msg.includes('Duplicate entry')) {
          currentItem.isFollowed = 1; // 强制更新为已关注
          this.setData({ listData });
          wx.showToast({ title: '已关注该用户', icon: 'none' });
          return;
        }

        // 处理取消关注/关注成功逻辑
        if (res.data.code === 200) {
          // 核心：强制更新状态（取消关注→未关注，关注→已关注）
          currentItem.isFollowed = isFollowed ? 0 : 1;
          
          // 关注成功时保存记录ID，用于后续取消关注
          if (!isFollowed && res.data.data?.id) {
            currentItem.followRecordId = res.data.data.id;
          }
          
          // 立即更新UI，确保状态同步
          this.setData({ listData });
          
          wx.showToast({
            title: isFollowed ? '取消关注成功' : '关注成功',
            icon: 'success',
            duration: 1500
          });
        } else {
          // 接口返回失败时，恢复状态（避免UI错误）
          wx.showToast({ title: res.data.msg || '操作失败', icon: 'none' });
          console.error('接口返回异常：', res.data);
        }
      },
      fail: (err) => {
        console.error('关注/取消关注接口请求失败：', err);
        wx.showToast({ title: '网络错误', icon: 'none' });
      },
      complete: () => {
        // 无论成功失败都恢复按钮状态
        this.setData({ operatingIndex: -1 });
      }
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 1. 计算导航栏高度
    try {
      const systemInfo = wx.getSystemInfoSync();
      const statusBarHeight = systemInfo.statusBarHeight;
      const navHeight = statusBarHeight + 44; // 状态栏+导航栏主体高度
      this.setData({ statusBarHeight, navHeight });
    } catch (e) {
      console.error('获取系统信息失败', e);
      this.setData({ statusBarHeight: 20, navHeight: 64 }); // 默认值
    }

    // 2. 校验登录态并加载粉丝列表
    const userInfo = wx.getStorageSync('userInfo');
    const followedId = userInfo?.id;
    if (!userInfo || !followedId) {
      wx.showToast({ title: '未获取到用户信息，请登录', icon: 'none' });
      setTimeout(() => {
        wx.navigateTo({ url: '/pages/login/login' });
      }, 1500);
      return;
    }

    // 3. 加载粉丝列表（强制刷新，确保状态最新）
    this.loadFollowers(followedId, true);
  },

  /**
   * 从接口加载粉丝列表数据（核心：同步关注状态）
   */
  loadFollowers(followedId, forceRefresh = false) {
    if (!followedId) return;
    
    this.setData({ isLoading: true });
    const token = wx.getStorageSync('token');

    wx.request({
      url: `http://localhost:8080/userr/follow/followers/${followedId}`,
      method: 'GET',
      header: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      },
      success: (res) => {
        if (res.data.code === 200) {
          let data = res.data.data;
          if (Array.isArray(data)) {
            // 格式化数据：确保关注记录ID和状态正确
            const formattedList = data.map(item => {
              const followerUser = item.followerUser || {};
              return {
                avatar: followerUser.avatarUrl ? `https://gzq123.oss-cn-beijing.aliyuncs.com/${followerUser.avatarUrl}` : '/images/default-avatar.png',
                nickname: followerUser.nickname || '未知用户',
                time: followerUser.joinTime 
                  ? `${followerUser.joinTime.split('-')[0]}年加入` 
                  : '未知时间',
                gender: followerUser.sex === 1 ? '男' : (followerUser.sex === 0 ? '女' : '未知'),
                isFollowed: item.isFollowed === 1 ? 1 : 0, // 明确状态（1=已关注，0=未关注）
                followerId: item.followerId || 0,
                followRecordId: item.id || '' // 重点：保存关注记录ID（用于取消关注）
              };
            });

            this.setData({ listData: formattedList });
            console.log('粉丝列表加载成功，状态已同步：', formattedList);
          } else {
            wx.showToast({ title: '粉丝列表数据格式异常', icon: 'none' });
          }
        } else {
          wx.showToast({ title: res.data.msg || '获取粉丝列表失败', icon: 'none' });
          console.error('接口返回异常：', res.data);
        }
      },
      fail: (err) => {
        console.error('加载粉丝列表接口请求失败：', err);
        wx.showToast({ title: '网络错误，无法加载粉丝列表', icon: 'none' });
      },
      complete: () => {
        this.setData({ isLoading: false });
      }
    });
  },

  /**
   * 页面显示时强制刷新（确保状态最新）
   */
  onShow() {
    const userInfo = wx.getStorageSync('userInfo');
    const followedId = userInfo?.id;
    if (userInfo && followedId) {
      this.loadFollowers(followedId, true);
    }
  },

  /**
   * 下拉刷新时刷新数据
   */
  onPullDownRefresh() {
    const userInfo = wx.getStorageSync('userInfo');
    const followedId = userInfo?.id;
    if (followedId) {
      this.loadFollowers(followedId, true);
    }
    setTimeout(() => {
      wx.stopPullDownRefresh();
    }, 500);
  },


  // 跳转用户中心（携带目标用户ID）
  gotoUserCenter(e) {
    const userId = e.currentTarget.dataset.userid;
    console.log('要传递的userId：', userId);
    wx.navigateTo({ url: `/my/pages/user-detail/user-detail?userId=${userId}` });
  },

  /**
   * 返回上一页
   */
  onBack() {
    wx.navigateBack({ delta: 1 });
  },

  /**
   * 其他生命周期函数
   */
  onReady() {},
  onHide() {},
  onUnload() {},
  onReachBottom() {},
  onShareAppMessage() {}
})
    